package org.springframework.context.annotation;

import cn.hutool.core.util.ClassUtil;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.stereotype.Component;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author derekyi
 * @date 2020/12/26
 */
public class ClassPathScanningCandidateComponentProvider {

	public Set<BeanDefinition> findCandidateComponents(String basePackage) {
		//传入basePackage（扫描的包）
		//先创建一个linked的hashset集合，里面用来存我们找到的BeanDefinition
		Set<BeanDefinition> candidates = new LinkedHashSet<BeanDefinition>();


		//ClassUtil是hutool里的，通过注解，找到对应的类。当然原版本肯定不是这样的
		// 扫描有org.springframework.stereotype.Component注解的类
		//这样就可以得到包下所有的类了
		Set<Class<?>> classes = ClassUtil.scanPackageByAnnotation(basePackage, Component.class);
		for (Class<?> clazz : classes) {
			//一个个创建BeanDefinition对象，注意这里没有传入参数，由于没有name，就没有注册进入ioc容器。都在后面
			BeanDefinition beanDefinition = new BeanDefinition(clazz);
			//加入集合
			candidates.add(beanDefinition);
		}
		return candidates;
	}
}
